package br.com.proway.cursovipjava.telas;

import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.awt.image.ImageObserver;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.text.MaskFormatter;

import br.com.proway.biblioteca.Estado;

public class CadastrarEstado extends JFrame {

	private JFormattedTextField campoNomeEstado;
	private JTextField proximoCodigoEstado;

	public JTextField getProximoCodigoEstado() {
		return proximoCodigoEstado;
	}

	public CadastrarEstado() throws Exception {
		super();
		setTitle("Programa Treinamento java proway");
		setLocation(100, 100);
		setSize(400, 400);
		setLayout(null);
		setJMenuBar(retornaMenu());
		setContentPane(getConteudo());
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public JMenuItem retornarItemMenuCadastrarEditora() {
		JMenuItem jmenuItem = new JMenuItem("Cadastrar Editora");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					CadastrarEditora ce = new CadastrarEditora();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem;
	}
	
	public JMenuItem retornarItemMenuCadastrarEstado() {
		JMenuItem jmenuItem = new JMenuItem("Cadastrar Estado");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					CadastrarEstado ce = new CadastrarEstado();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem;
	}

	public JMenuItem retornarItemMenuArquivoSair() {
		JMenuItem jmenuItem = new JMenuItem("Sair");
		jmenuItem.setMnemonic('S');
		jmenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		return jmenuItem;
	}

	public JMenu retornarMenuArquivo() {
		JMenu jmenuArquivo = new JMenu("Arquivo");
		jmenuArquivo.setMnemonic('A');
		jmenuArquivo.add(retornarItemMenuCadastrarEstado());
		jmenuArquivo.add(retornarItemMenuCadastrarEditora());
		jmenuArquivo.add(retornarItemMenuArquivoSair());
		return jmenuArquivo;
	}

	public JMenu retornarMenuEditar() {
		JMenu jmenuArquivo = new JMenu("Listas");
		jmenuArquivo.setMnemonic('E');
		jmenuArquivo.add(retornarItemMenuListarEditora());
		
		return jmenuArquivo;
	}

	private JMenuItem retornarItemMenuListarEditora() {
		JMenuItem jmenuItem = new JMenuItem("Listar Editora");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					ListarEditoras ce = new ListarEditoras();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem; 
	}

	public JMenuBar retornaMenu() {
		JMenuBar jmenubar = new JMenuBar();
		jmenubar.setCursor(new Cursor(Cursor.HAND_CURSOR));
		jmenubar.add(retornarMenuArquivo());
		jmenubar.add(retornarMenuEditar());
		return jmenubar;
	}

	public JPanel getConteudo() throws Exception {
		JPanel jp = new JPanel();
		jp.setLayout(null);
		jp.setSize(200, 200);
		jp.setBackground(new Color(250, 200, 200));
		jp.add(getLabelNomeEstado());
		jp.add(getButtonSalvar());
		jp.add(getButtonLimpar());
		jp.add(retornarCampoNomeEstado());
		jp.add(retornarProximoCodigoEstado());
		return jp;
	}

	public JLabel getLabelNomeEstado() {
		JLabel nomeestado = new JLabel("Nome Estado:");
		nomeestado.setBounds(10, 10, 100, 20);
		return nomeestado;
	}

	public JButton getButtonSalvar() {
		JButton salvar = new JButton("Salvar");
		salvar.setBounds(10, 100, 100, 20);
		salvar.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				Estado e = new Estado();
				try {
					e.cadastrarEstado(getCampoNomeEstado().getText());
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					JOptionPane.showMessageDialog(null, e1.getMessage());
				}
				try {
					getProximoCodigoEstado().setText(
							String.valueOf(e.retornarProximoCodigoEstado()));
					getCampoNomeEstado().setText("");
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		return salvar;
	}

	public JButton getButtonLimpar() {
		JButton salvar = new JButton("Limpar");
		salvar.setBounds(150, 100, 100, 20);
		salvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getCampoNomeEstado().setText("");
			}
		});
		return salvar;
	}

	public JTextField getCampoNomeEstado() {
		return campoNomeEstado;
	}

	public JTextField retornarCampoNomeEstado() throws Exception {
		campoNomeEstado = new JFormattedTextField();
		MaskFormatter formatonome = new MaskFormatter("****************************************************");
		formatonome.setValidCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrtsuvwxyz");
		formatonome.install(campoNomeEstado);
		campoNomeEstado.setBounds(120, 10, 150, 20);
		return campoNomeEstado;
		
	}

	public JTextField retornarProximoCodigoEstado() throws Exception {
		proximoCodigoEstado = new JTextField();
		proximoCodigoEstado.setBounds(120, 50, 150, 20);
		Estado e = new Estado();
		proximoCodigoEstado.setText(String.valueOf(e.retornarProximoCodigoEstado()));
		proximoCodigoEstado.setEditable(false);

		return proximoCodigoEstado;
	}

	public static void main(String[] args) throws Exception {
		CadastrarEstado p = new CadastrarEstado();
		p.setVisible(true);
	}
}